#include "InfoLogger.h"

InfoLogger::InfoLogger() {

	string nombreArchivo;

	nombreArchivo = "log/logs.txt";

	try {
		this->archivo.open(nombreArchivo.c_str(),ios_base::app);
	} catch (exception e){
		cerr << "Error al intentar crear el archivo de registros.";
	}
}

bool InfoLogger::loggerValido(){

	return this->archivo.good();
}

bool InfoLogger::escribirError(const string &error){

	if ( !this->loggerValido()){
		return false;
	}

	time_t rawtime;
	struct tm* timeinfo;

	time(&rawtime);
	timeinfo = localtime(&rawtime);

	string buffer = "[";

	buffer += asctime (timeinfo);

	/*Le quito el \n del asctime*/
	buffer.erase(buffer.size()-1);

	buffer += "] Error: " + error;
    buffer += '\n';

    this->archivo.seekp(0, std::ios::end);
	this->archivo.write(buffer.c_str(),buffer.size() );
	this->archivo.flush();

	cerr << buffer;

	return true;
}

bool InfoLogger::escribirMensaje(const string &mensaje){

	if ( !this->loggerValido()){
		return false;
	}


	time_t rawtime;
	struct tm * timeinfo;

	time ( &rawtime );
	timeinfo = localtime ( &rawtime );

	string buffer = "[";

	buffer += asctime (timeinfo);

	/*Le quito el \n*/
	buffer.erase(buffer.size()-1);

	buffer += "] Mensaje: " ;

	buffer += mensaje;
	buffer += '\n';

    this->archivo.seekp(0, std::ios::end);
	this->archivo.write(buffer.c_str(),buffer.size());
	this->archivo.flush();

	cout<< buffer;

	return true;
}

InfoLogger::~InfoLogger() {

  this->archivo.close();
}
